/**
 *用来加载bitmap的,就是Model.LoadSkin的替代品，这样结构比较干净了就
 *这个要做成能复用的
 *先考虑Texture的，
 * 
 * 很好，这个东西是可以用的了
 * 
 * 提供了方式可以加载一次图片而给很多人用
 * 
 * !!这个没太大用途,以后就是主要做其他用途的
 * 因为现在的结构是资源一次性加载完毕
 */
package kgame5.k3d.util3d.loader3d {
import kgame5.k3d.core.obj3d.node3d.Mesh3D;
import kgame5.kutil.*;

import flash.display.*;
import flash.events.*;
import flash.net.*;

public class Loader3DSkin extends EventDispatcher {
	
	//加载图片成功
	public static const 
		EVENTTYPE_LOADOK:String="EVENTTYPE_LOADOK",
		EVENTTYPE_LOADFAIL:String="EVENTTYPE_LOADFAIL",
		EVENTTYPE_PROGRESS:String="EVENTTYPE_PROGRESS";
	//_________________Property_____________________

	private var md_master : Mesh3D;//如果这个不是null,则加载成功了自动替换上

	private var loader : Loader;
	
	
	//_________________Method__________________
	public function Loader3DSkin() {
		//--！！只有一个loader,这个很重要，为了防止多次load3d.loadMesh3dSkin()而导致有多个loader来工作，则会导致图片的混乱	
		loader = new Loader();
		
		loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
		//loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
		
		loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
		 
		//loader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
		loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
	}
	
	//对一个mesh3D加载纹理
	public function Load(skinUrl : String,p_md_master : Mesh3D=null) : void {
		//T.p("LoadSkin",skinUrl);
		//,clipX:Number,clipY:Number,clipW:Number,clipH:Number){

		//T.p("LoadSkin ", skinUrl);
		//--
		md_master = p_md_master;
		
		
//		//--
//		var extendName : String = (skinUrl.substr(-4, 4)).toUpperCase();
//		//转换成大写
//		//T.p("图片扩展名字:"+extendName);
//		switch(extendName) {
//			case ".PNG":
//			case ".GIF":
//			case ".JPG":
//			case "JPEG":
//			case ".SWF":
//				break;
//			default:
//				//如果是无效的则不加载直接返回
//				//T.p("无效的url"+extendName);
//				return;
//		}
		
		loader.load(new URLRequest(skinUrl));
	}

	public function StopLoadSkin() {
		try {
			loader.close();
		}catch(e : Error) {
		}
	}

	private function completeHandler(e : Event) : void {
	 	//T.p("!!Loader3dSkin 加载图片成功了");
		var l : Loader = LoaderInfo(e.target).loader;
		//T.p(l.content);
		var bmd : BitmapData = Bitmap(l.content).bitmapData;
		
		if(md_master!=null){//自动设置,默认就是加载成功自动设置
			md_master.mi.bmd=bmd;//visu.setBmd(bmd);
			md_master.forceRefresh();
		}else{
			//通知外部说加载图片成功了,由外部来设置
			this.dispatchEvent(new KEvent(EVENTTYPE_LOADOK,{bmd:bmd}));
		}
	}

	private function ioErrorHandler(event : IOErrorEvent) : void {
           trace("loader3dSkin.ioErrorHandler: " + event);
            //loader.close();
           if(md_master!=null){//自动设置,默认就是加载成功自动设置
			
		}else{
			//通知外部说加载图片成功了,由外部来设置
			this.dispatchEvent(new KEvent(EVENTTYPE_LOADFAIL));
		}
	}
	private function progressHandler(event:ProgressEvent):void {
		//trace("progressHandler: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
		this.dispatchEvent(new KEvent(EVENTTYPE_PROGRESS,{bytesLoaded:event.bytesLoaded,bytesTotal:event.bytesTotal}));
	}
	/*
	private function openHandler(event:Event):void {
	trace("openHandler: " + event);
	}
	
	//这个的目标就是搞到一个bitmap
	private function initHandler(e : Event) : void {
      
	}

	private function httpStatusHandler(event : HTTPStatusEvent) : void {
           // trace("httpStatusHandler: " + event);
           // loader.close();
	}
	

	private function unLoadHandler(event:Event):void {
	trace("unLoadHandler: " + event);
	}

	//*/
}//end of class
}